package br.com.sgs.persist;

import br.com.sgs.basic.GenericDAO;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 *
 * @author MaUrO FiLhO
 */
@Entity
@javax.persistence.SequenceGenerator(name="suprimento_id_suprimento_seq", sequenceName="suprimento_id_suprimento_seq")
@Table(name = "suprimento")
@Inheritance(strategy=InheritanceType.JOINED)
@NamedQueries({
    @NamedQuery(name = "Suprimento.findAll", query = "SELECT s FROM Suprimento s"),
    @NamedQuery(name = "Suprimento.findByIdSuprimento", query = "SELECT s FROM Suprimento s WHERE s.idSuprimento = :idSuprimento"),
    @NamedQuery(name = "Suprimento.findByDiscriminacao", query = "SELECT s FROM Suprimento s WHERE s.discriminacao = :discriminacao"),
    @NamedQuery(name = "Suprimento.findByUnidade", query = "SELECT s FROM Suprimento s WHERE s.unidade = :unidade"),
    @NamedQuery(name = "Suprimento.findByMarca", query = "SELECT s FROM Suprimento s WHERE s.marca = :marca"),
    @NamedQuery(name = "Suprimento.findByTipo", query = "SELECT s FROM Suprimento s WHERE s.tipo = :tipo")})
public class Suprimento implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator="suprimento_id_suprimento_seq")
    @Basic(optional = false)
    @Column(name = "id_suprimento")
    private Integer idSuprimento;
    @Basic(optional = false)
    @Column(name = "discriminacao")
    private String discriminacao;
    @Column(name = "unidade")
    private String unidade;
    @Basic(optional = false)
    @Column(name = "marca")
    private String marca;
    @Basic(optional = false)
    @Column(name = "tipo")
    private String tipo;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "suprimento")
    private List<Epi> epiList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "suprimento")
    private List<ItemRequsicao> itemRequsicaoList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "suprimento")
    private List<ItemPedido> itemPedidoList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "suprimento")
    private List<Equipamento> equipamentoList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "suprimento")
    private List<Material> materialList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "suprimento")
    private List<FuncionarioEmprestimo> funcionarioEmprestimoList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "suprimento")
    private List<Estoque> estoqueList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "suprimento")
    private List<EquipExterno> equipExternoList;

    public Suprimento() {
    }

    public Suprimento(Integer idSuprimento) {
        this.idSuprimento = idSuprimento;
    }

    public Suprimento(Integer idSuprimento, String discriminacao, String marca, String tipo) {
        this.idSuprimento = idSuprimento;
        this.discriminacao = discriminacao;
        this.marca = marca;
        this.tipo = tipo;
    }

    public Integer getIdSuprimento() {
        return idSuprimento;
    }

    public void setIdSuprimento(Integer idSuprimento) {
        this.idSuprimento = idSuprimento;
    }

    public String getDiscriminacao() {
        return discriminacao;
    }

    public void setDiscriminacao(String discriminacao) {
        this.discriminacao = discriminacao;
    }

    public String getUnidade() {
        return unidade;
    }

    public void setUnidade(String unidade) {
        this.unidade = unidade;
    }

    public String getMarca() {
        return marca;
    }

    public void setMarca(String marca) {
        this.marca = marca;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public List<Epi> getEpiList() {
        return epiList;
    }

    public void setEpiList(List<Epi> epiList) {
        this.epiList = epiList;
    }

    public List<ItemRequsicao> getItemRequsicaoList() {
        return itemRequsicaoList;
    }

    public void setItemRequsicaoList(List<ItemRequsicao> itemRequsicaoList) {
        this.itemRequsicaoList = itemRequsicaoList;
    }

    public List<ItemPedido> getItemPedidoList() {
        return itemPedidoList;
    }

    public void setItemPedidoList(List<ItemPedido> itemPedidoList) {
        this.itemPedidoList = itemPedidoList;
    }

    public List<Equipamento> getEquipamentoList() {
        return equipamentoList;
    }

    public void setEquipamentoList(List<Equipamento> equipamentoList) {
        this.equipamentoList = equipamentoList;
    }

    public List<Material> getMaterialList() {
        return materialList;
    }

    public void setMaterialList(List<Material> materialList) {
        this.materialList = materialList;
    }

    public List<FuncionarioEmprestimo> getFuncionarioEmprestimoList() {
        return funcionarioEmprestimoList;
    }

    public void setFuncionarioEmprestimoList(List<FuncionarioEmprestimo> funcionarioEmprestimoList) {
        this.funcionarioEmprestimoList = funcionarioEmprestimoList;
    }

    public List<Estoque> getEstoqueList() {
        return estoqueList;
    }

    public void setEstoqueList(List<Estoque> estoqueList) {
        this.estoqueList = estoqueList;
    }

    public List<EquipExterno> getEquipExternoList() {
        return equipExternoList;
    }

    public void setEquipExternoList(List<EquipExterno> equipExternoList) {
        this.equipExternoList = equipExternoList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idSuprimento != null ? idSuprimento.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Suprimento)) {
            return false;
        }
        Suprimento other = (Suprimento) object;
        if ((this.idSuprimento == null && other.idSuprimento != null) || (this.idSuprimento != null && !this.idSuprimento.equals(other.idSuprimento))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.com.sgs.persist.Suprimento[idSuprimento=" + idSuprimento + "]";
    }

    public static final String FALHA = "falha";
    public static final String SUCESSO = "sucesso";
    public static final String CANCELAR = "cancelar";

    public String cadastrarSuprimento(Suprimento s){
        GenericDAO DAO = new GenericDAO();
        String retorno = FALHA;
          try{
              setDiscriminacao(s.getDiscriminacao());
              setUnidade(s.getUnidade());
              setMarca(s.getMarca());
              setTipo(s.getTipo());
              
              DAO.inserir(this);
              retorno = SUCESSO;
             

           } catch (Exception e) {
              System.out.print(e);
              retorno = FALHA;
           }

        return retorno;
    }


    public String alterarSuprimento(Suprimento s){
        GenericDAO DAO = new GenericDAO();
        String retorno = FALHA;
        try{
        DAO.alterar(s);
        retorno = SUCESSO;
        }
        catch(Exception e){
        System.out.print(e);
        retorno = FALHA;
        }
        return retorno;
    }

    public String excluirSuprimento(Suprimento s){
        GenericDAO DAO = new GenericDAO();
        String retorno = FALHA;
        try{
        DAO.deletar(s);
        retorno = SUCESSO;
        }
        catch(Exception e){
        System.out.print(e);
        retorno = FALHA;
        }
        return retorno;
    }
    public String cancelarSuprimento(){
        return CANCELAR;
    }

    public String consultaSuprimento(Suprimento s) {
        GenericDAO DAO = new GenericDAO();
        String retorno = FALHA;
        try{
        DAO.getAllSuprimentoBeEpiLikeDiscriminacao(s);
        retorno = SUCESSO;
        }
        catch(Exception e){
        System.out.print(e);
        retorno = FALHA;
        }
        return retorno;
    }

}
